#ifndef PRPDINFOTAB_H
#define PRPDINFOTAB_H

#include <QWidget>
#include <QHBoxLayout>
#include "tabframe/mapinfo/mapinfotab.h"

class PRPDFeature;

/**
 * @brief The PRPDInfoTab class
 */
class PRPDInfoTab : public MapInfoTab
{
    Q_OBJECT
public:
    explicit PRPDInfoTab(QWidget *parent = nullptr);
    virtual ~PRPDInfoTab();
public:
    /**
     * @brief 设置检测数据类型编码
     * @param code 数据类型编码
     */
    void setDataTypeCode(uint8_t code) override;

    /**
     * @brief 设置图谱数据长度
     * @param length 数据长度
     */
    void setDataLength(int32_t length) override;

    /**
     * @brief 设置图谱生成时间
     * @param time 生成时间
     */
    void setCreateTime(const QString& time) override;

    /**
     * @brief 设置图谱性质
     * @param property 图谱性质
     */
    void setChartProperty(const DataSpecificationGW::SpectrumCharacter& property) override;

    /**
     * @brief 设置被测设备名称
     * @param name 设备名称
     */
    void setDeviceName(const QString& name) override;

    /**
     * @brief 设置被测设备编码
     * @param code 设备编码
     */
    void setDeviceCode(const QString& code) override;

    /**
     * @brief 设置测点名称
     * @param name 测点名称
     */
    void setMeasurementName(const QString& name) override;

    /**
     * @brief 设置测点编码
     * @param code 测点编码
     */
    void setMeasurementCode(const QString& code) override;

    /**
     * @brief 设置检测通道标志
     * @param flag 通道标志
     */
    void setChannelFlag(int64_t flag) override;

    /**
     * @brief 设置存储数据类型
     * @param type 数据类型
     */
    void setDataType(uint8_t type) override;

    /**
     * @brief 设置幅值单位
     * @param unit 幅值单位
     */
    void setAmplitudeUnit(uint8_t unit) override;

    /**
     * @brief 设置幅值下限
     * @param lowerLimit 下限值
     */
    void setAmplitudeLowerLimit(float lowerLimit) override;

    /**
     * @brief 设置幅值上限
     * @param upperLimit 上限值
     */
    void setAmplitudeUpperLimit(float upperLimit) override;

    /**
     * @brief 设置频带
     * @param band 频带
     */
    void setFrequencyBand(uint8_t band) override;

    /**
     * @brief 设置下限频率
     * @param lowerFreq 下限频率
     */
    void setLowerFrequency(float lowerFreq) override;

    /**
     * @brief 设置上限频率
     * @param upperFreq 上限频率
     */
    void setUpperFrequency(float upperFreq) override;

    /**
     * @brief 设置相位窗数
     * @param count 窗数
     */
    void setPhaseWindowCount(int32_t count) override;

    /**
     * @brief 设置量化幅值
     * @param n 量化幅值
     */
    void setQuantizedAmplitude(int n) override;

    /**
     * @brief 设置工频周期数p
     * @param num 工频周期数
     */
    void setFrequencyPeriod(int32_t num) override;

    /**
     * @brief 设置放电类型概率
     * @param probability 概率值
     */
    void setDischargeTypeProbability(const QString& probability) override;

    /**
     * @brief 设置背景文件名称
     * @param fileName 文件名
     */
    void setBackgroundFileName(const QString& fileName) override;

    /**
    * @brief 设置预留数据
    * @param byte 预留数据
    */
    void setReservedData(const QByteArray& byte) override;

    /**
     * @brief 设置局部放电图谱数据
     * @param byte 局部放电图谱数据
     */
    void setPRPDData(const QByteArray& byte) override;
private:
    QTableWidgetItem* createTableWidgetItem(const QString& text);
    std::shared_ptr<PRPDFeature> m_prpdFeature;
    QGroupBox* m_pChartBox;
    QTextEdit* m_pChartData;
    QHBoxLayout* m_pMainLayout;
    QHBoxLayout* m_pLayout;
};

#endif // PRPDINFOTAB_H
